package com.woniuxy.springbootthymeleaf.controller;

import com.woniuxy.springbootthymeleaf.entity.Books;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author linke
 * @version 1.0
 * @className: ThymeleafHandler
 * @description: User模板 控制器
 * @date 2021/11/16 21:34
 */
@Controller
@RequestMapping("/user")
public class UserHandler {
    /**
     * 方式一：ModelMap
     *
     * ModelMap对象主要用于传递控制方法处理数据到结果页面，也就是说我们把结果页面上需要的数据放到ModelMap对象中即可，
     * 他的作用类似于request对象的setAttribute方法的作用，用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数：
     * addAttribute(String key,Object value);
     * 在页面上可以通过el变量方式$key或者thymeleaf的一系列数据展示标签获取并展示modelmap中的数据。
     * modelmap本身不能设置页面跳转的url地址别名或者物理跳转地址，那么我们可以通过控制器方法的返回值来设置跳转url地址别名或者物理跳转地址。
     * ModelMap的实例是由系统自动创建并作为控制器方法参数传入，用户无需自己创建。
     * @param map //需要存储的数据
     * @return
     */
    @RequestMapping("/test")
    public String test(ModelMap map){
        Map<String,Object> data = new HashMap<>();
        data.put("name","zhangsan");
        data.put("age",10);
        //存储数据
        map.addAllAttributes(data);
        //跳转的页面  默认是templates文件夹下
        return "/thymeleaf.html";
    }

    /**
     * 方式二：返回模型视图对象 ModelAndView
     *
     * 也可以使用ModelAndView返回数据及跳转页面，handler
     * @return
     */
    @RequestMapping("/mav")
    public ModelAndView mv(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("thymeleaf.html");
        //存储数据
        modelAndView.addObject("name","lisi");
        modelAndView.addObject("age",20);
        //返回模型视图对象
        return modelAndView;
    }

    /**
     * 测试 th:if th:unless 标签的使用 相当于 if else
     * @param map
     * @return
     */
    @RequestMapping("/cond")
    public String condition(ModelMap map) {
        map.addAttribute("isOk", true);
        map.addAttribute("nickname", "小明");
        return "/thymeleaf.html";
    }

    /**
     * 测试 th:value 设值  实现数据回显
     * 传过来的值  又回显到页面上
     * @param map
     * @return
     */
    @RequestMapping("/login")
    public String login(String uname,String pwd,ModelMap map) {
        map.addAttribute("uname", uname);
        map.addAttribute("pwd", pwd);


        System.out.println(uname);
        System.out.println(pwd);
        return "/user.html";
    }

    /**
     *
     * **3、themeleaf循环标签**
     *
     * th:each=”变量名,状态:${集合}”
     *
     * @param map
     * @return
     */
    @RequestMapping("/list")
    public String list(ModelMap map) {
       List<String> books = Arrays.asList("现象学","观念论","纯粹直观","精神分析");
       map.addAttribute("books",books);
        return "/user.html";
    }

    /**
     * 返回数据遍历循环表格
     * @param map
     * @return
     */
    @RequestMapping("/books")
    public String books(ModelMap map) {
        List<Books> books = Arrays.asList(
                new Books("永恒轮回",100),
                new Books("世界之夜",100),
                new Books("镜像认同",100),
                new Books("我思故我在",100)
        );
        map.addAttribute("books",books);
        return "/user.html";
    }

    /**
     * *4、th:任意属性**
     * @param map
     * @return
     */
    @RequestMapping("/style")
    public String style(ModelMap map) {
        map.addAttribute("style","color:red");
        return "/user.html";
    }

    /**
     * 算术运算符
     *
     * @param map
     * @return
     */
    @RequestMapping("/cal")
    public String calculate(ModelMap map) {
        Map<String,Object> data = new HashMap<>();
        data.put("x",10);
        data.put("y",4);
        //
        map.addAllAttributes(data);
        return "/user.html";
    }

}